<?php

include_once(__dir__ . '/class.email.php');

/**
 * Отвечает за отсылку электронной почты
 */
class send_email {
	
	/**
	 * Получатель
	 * var object email
	 */
	private $addressee = NULL;
	
	/**
	 * Тема письма
	 * var string
	 */
	private $subject = '';
	
	/**
	 * Текст сообщения
	 * var string
	 */
	private $message = '';
	
	/**
	 * Шаблон сообщения
	 * var string
	 */
	private $template = '';
	
	/**
	 * Отправитель
	 * var object email
	 */
	private $sender = NULL;
	
	/**
	 * Формат сообщения
	 * var string
	 */
	private $format = 'plain';
	
	function __construct($addressee, $subject = '', $message = '', $sender = NULL, $format = 'plain') {
		$this->set_addressee($addressee);
		$this->set_subject($subject);
		$this->set_message($message);
		$this->set_sender($sender);
		$this->set_format($format);
	}
	
	function __destruct() {
		unset($this->addressee, $this->sender);
	}
	
	function set_addressee($email) {
		$this->addressee = new email($email);
	}
	
	function set_subject($subject) {
		$this->subject = $subject;
	}
	
	function set_message($message) {
		$this->message = $message;
	}
	
	function set_template($template) {
		$this->template = $template;
	}
	
	/**
	 * Замена параметров в шаблоне
	 * @param array $params Ассоциативный массив параметров
	 */
	function set_template_params($params) {
		$message = $this->template;
		foreach ($params as $param => $value) {
			$message = str_replace("<!#$param#>", $value, $message);
		}
		$this->set_message($message);
	}
	
	function set_sender($email) {
		$this->sender = new email($email);
	}
	
	function set_format($format) {
		if ($format == 'plain' || $format == 'html') {
			$this->format = $format;
		} else {
			throw new Exception('Notice: unknown format of email. Default (plain) is used.');
		}
	}
	
	function get_addressee() {
		return $this->addressee->get_email();
	}
	
	function get_subject() {
		return $this->subject;
	}
	
	function get_message() {
		return $this->message;
	}
	
	function get_sender() {
		return $this->sender->get_email();
	}
	
	function get_format() {
		return $this->format;
	}
	
	private function get_headers() {
		$headers  = "MIME-Version: 1.0\r\n";
		$headers .= "Content-type: text/{$this->get_format()}; charset=\"utf-8\"\r\n";
		$headers .= "Content-Transfer-Encoding: 7bit\r\n";
		$headers .= "To: {$this->get_addressee()}\r\n";
		$headers .= "From: СУНЦ НГУ <{$this->get_sender()}>\r\n";
		return $headers;
	}
	
	function send_email() {
		if ($this->get_addressee() === NULL || $this->get_sender() === NULL) {
			return false; // перед отправкой сообщения требуется указать адресата и отправителя
		}
		$message = $this->message;
		if ($this->format == 'plain') {
			$message = wordwrap($message, 70);
		}
		//$message = preg_replace('/[\t\n]+/', '', $message);
		return mail($this->get_addressee(), $this->get_subject(), $message, $this->get_headers());
	}
}

?>
